草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 虚函数重定义隐藏了另一个基类的同名重载函数

好的,我正在使用虚函数、重载函数和多重继承。当然,结果并不好。场景:类base1有一个需要由其子类指定的虚函数。类derived派生自两个父类base1和base2,应该使用base2的现有功能来定义base1的虚函数。这没关系,但当然很尴尬。动机是我无法更改类base2并且已经投入大量资金的现有接口(interface)具有同名的base1和base2类函数。没关系,base1中没有实现任何内容,它应该只是重定向到base2。我的问题出现是因为base2有几个与所讨论的虚函数同名的重载函数。所有其他重载版本在编译时基本上都被隐藏了。这是一个小的演示代码。//thisversiondo

c++ - 使用基类方法初始化派生类成员

合法吗?如果是这样,您认为这是良好的编码习惯吗?我想做这样的事情(不显示不重要的细节):classItemStorage{intsize()const;};classSpecialStorage:publicItemStorage{public:SpecialStorage(...):ItemStorage(...),items(ItemStorage::size()){...}private:intitems;};我很确定如果方法size不是虚拟的就可以了。如果它是虚拟的并且派生类不覆盖它怎么办? 最佳答案 一般规则是,在初始化期

c++ - 在基类中调用 shared_from_this() 时的 bad_weak_ptr

我有一个SuperParent类,一个Parent类(派生自SuperParent)并且都包含一个shared_ptr到一个Child类(它包含一个weak_ptr到一个SuperParent)。不幸的是,我在尝试设置Child的指针时遇到了bad_weak_ptr异常。代码如下:#include#include#include#includeusingnamespaceboost;classSuperParent;classChild{public:voidSetParent(shared_ptrparent){parent_=parent;}private:weak_ptrpare

c++ - 如何从基类转换为派生类?

我想制作一个多线程模型,其中服务器主循环不会因挂起的数据库事务而停止。所以我做了几个简单的类,这是一个非常简化的版本:enumType{QueryType_FindUser=1现在,当我将数据作为Base传输时,我想再次将其转换回User类:concurrency::concurrent_queueBackgroundQueryQueue;voidBackgroundQueryWorker::Worker(){while(ServerRunning){QueryInformation::BaseTemp;if(BackgroundQueryQueue.try_pop(Temp)){sw

c++ - 我可以从除子类之外的另一个类调用抽象基类的公共(public)赋值运算符吗?

我遇到了MISRAC++2008指南,该指南中的规则12-8-2说:Thecopyassignmentoperatorshallbedeclaredprotectedorprivateinanabstractclass.然后我想,当我公开一个抽象类的赋值运算符时,是否可以从除其子类之外的其他类调用它?我觉得不可能。如果这是真的,他们为什么要定义这条规则?基本上,从类设计的角度来看,我不使用具有私有(private)成员的抽象类,也不在基类中定义赋值运算符。因此,通常不需要应用此规则。但是,如果有一个抽象基类的公共(public)赋值运算符,我会将其设置为protected(或尽可能私有

c++ - 在 C++ 中嵌套在模板中的类中使用基类的成员时出错

考虑以下示例:templatestructA{structB{intb;};structC:B{voidf(){b=0;}};};用GCC4.8.1编译它会出现以下错误:test.cc:Inmemberfunction‘voidA::C::f()’:test.cc:9:11:error:‘b’wasnotdeclaredinthisscopeb=0;^但是,b是父类B的成员(我在示例中使用了struct来公开所有内容)并且如果我使A非模板一切编译。为什么编译器会报错,我该如何避免? 最佳答案 这在语言中是一种晦涩的极端情况,但解决方

c++ - 派生类不能使用指向 protected 基类成员的成员指针

includeclassBase{protected:intfoo;intget_foo(){returnfoo;}};classDerived:publicBase{public:voidbar(){intBase::*i=&Base::foo;this->*i=7;printf("foois%d\n",get_foo());}};intmain(){Derivedd;d.bar();}我不明白为什么我的派生类型不能指向基类的protected成员。它有权访问该成员。它可以调用类似作用域的函数。为什么它不能创建一个成员指针?我正在使用gcc4.1.2,但出现此错误:test.cc:I

C++ 在基类中使用静态数组,在派生类中声明

我正在尝试创建一些类,它们都是从抽象类(我们称之为)BaseClass派生的类。在BaseClass中,我想对派生类中声明的static变量(数组)进行操作。C++中是否有一种聪明的方法让编译器知道静态变量将在派生类中声明?或者,例如,我应该在派生类的构造函数中将对静态变量的引用传递给基类构造吗?这是我的想法:classBaseClass{std::vector&vector;public:BaseClass(std::vector&dVector):vector(dVector){};voidvectorOperation(){vector.doSomething();}...}cl

c++ - 使用基类对象 C++ 初始化子类?

所以,标题可能有点困惑,但这是我的问题:我有一个父类(superclass)(我们称它为SupClass)和一个继承自SupClass的子类(我们称它为InhClass)。现在,我想为我的InhClass创建一个构造函数,它接收一个SupClass对象并用它初始化InhClass的“SupClass部分”。下面是一个代码示例,试图说明这一点:ClassSupClass{public:SupClass(){//InitializeSupClassobject}};ClassInhClass:privateSupClass{public:InhClass(SupClassobj){//In

基类和继承类之间的C++函数重载

考虑下面的例子。我猜想因为func是虚拟的,所以调用哪个实现的决定将在运行时根据实例类型(类型B)和参数类型(short或int)完成然而,在运行这段代码后,我得到了意想不到的结果,指针类型只决定了跳转哪个函数,这完全打破了我对多态性的基本假设...这引出了一个问题,我在哪里可以将2func实现与函数重载联系起来?谁能告诉我是什么原因导致了这个结果?谢谢classA{public:virtualvoidfunc(shortx){printf("A::func%d\n",x);}};classB:publicA{public:virtualvoidfunc(intx){printf("B